---@class bind
bind=class()

---@class bind_data
---@field key Str 绑定属性
---@field func binding_fun 属性监听回调


---@generic T
---绑定监听数据
---@param init T 初始化数据
---@return bind
function bind:ctor(init)
    self.bindable=binding.bindable(init)
    self.tag={}
    
    
    return self
end

---添加集合监听数据
---@param data bind_data[]
function bind:add(data)
    for index, value in ipairs(data) do
        self.tag[value.key]=binding.watch(self.bindable,value.key,value.func)
    end
end

---添加单个监听数据
---@param data bind_data
function bind:add_(data)
    self.tag[data.key]=binding.watch(self.bindable,data.key,data.func)
end


---删除指定key监听数据
---@param key Str
function bind:del(key)
    if  self.tag[key]~=nil then
        binding.unwatch(self.bindable, key, self.tag[key])
    end
end

---销毁
function bind:dtor()
    for key, value in pairs(self.tag) do
        binding.unwatch(self.bindable, key, value)
    end
    self=nil
end